﻿using System;
using System.Collections.Generic;
using System.Linq;
using SIM.Geo.DA;
using SIM.Geo.BE;


namespace SIM.Geo.BL
{
    public class BLTipoControlCalidad
    {
        #region Metodos
        /// <summary>
        /// Método listar tipo control de calidad
        /// </summary>
        /// <returns></returns>
        public List<TipoControlCalidad> ListarTipoControlCalidad()
        {
            return Accesor.ListarTipoControlCalidad();
        }
        /// <summary>
        /// Método que insertar tipo control calidad
        /// </summary>
        /// <param name="tipocontrolcalidad"></param>
        /// <returns></returns>
        public int InsertarTipoControCalidad(TipoControlCalidad tipocontrolcalidad)
        {
            int codigoNuevo = this.GenerarCodigoTipoControlCalidad() + 1;
            tipocontrolcalidad.CodigoTipoControlCalidad = codigoNuevo;
            return Accesor.InsertarTipoControlCalidad(tipocontrolcalidad);
        }
        /// <summary>
        /// Método que modifica tipo control calidad
        /// </summary>
        /// <param name="tipocontrolcalidad"></param>
        public void ModificarTipoControlCalidad(TipoControlCalidad tipocontrolcalidad)
        {
            var tipocontrolcalidadEdit = Accesor.ObtenerTipoControlCalidad(tipocontrolcalidad.CodigoTipoControlCalidad);
            tipocontrolcalidadEdit.Descripcion = tipocontrolcalidad.Descripcion;
            tipocontrolcalidadEdit.ErrorPermitidoAg = tipocontrolcalidad.ErrorPermitidoAg;
            tipocontrolcalidadEdit.ErrorPermitidoPb = tipocontrolcalidad.ErrorPermitidoPb;
            tipocontrolcalidadEdit.ErrorPermitidoZn = tipocontrolcalidad.ErrorPermitidoZn;
            tipocontrolcalidadEdit.ErrorPermitidoCu = tipocontrolcalidad.ErrorPermitidoCu;
            tipocontrolcalidadEdit.EsAutomatico = tipocontrolcalidad.EsAutomatico;
            tipocontrolcalidadEdit.RangoControl = tipocontrolcalidad.RangoControl;
            Accesor.ModificarTipoControlCalidad(tipocontrolcalidadEdit);
        }
        /// <summary>
        /// Método que elimina tipo control calidad
        /// </summary>
        /// <param name="codigoTipoControlCalidad"></param>
        public void EliminarTipoControlCalidad(int codigoTipoControlCalidad)
        {
            var tipocontrolcalidad = Accesor.ObtenerTipoControlCalidad(codigoTipoControlCalidad);
            Accesor.EliminarTipoControlCalidad(tipocontrolcalidad);
        }
        /// <summary>
        /// Método buscar tipo control calidad por nombre
        /// </summary>
        /// <param name="nombre"></param>
        /// <returns></returns>
        public List<TipoControlCalidad> BuscarTipoControlCalidad(string nombre)
        {
            return Accesor.BuscarTipoControlCalidad(nombre);
        }
        /// <summary>
        /// Método que devuelve un tipo control calidad por codigo
        /// </summary>
        /// <param name="codigoTipoControlCalidad"></param>
        /// <returns></returns>
        public TipoControlCalidad ObtenerTipoControlCalidad(int codigoTipoControlCalidad)
        {
            return Accesor.ObtenerTipoControlCalidad(codigoTipoControlCalidad);
        }
        /// <summary>
        /// Devuelve la lista para ComboBox, DropdownList, devuelve campos Value y Text
        /// </summary>
        /// <returns></returns>
        public List<ListItemInt> ObtenerListItem()
        {
            var result = Accesor.ListarTipoControlCalidad();
            return result.Select(x => new ListItemInt { Value = x.CodigoTipoControlCalidad, Text = x.Descripcion }).ToList();
        }
        #endregion



        #region Utilidades
        /// <summary>
        /// Método que genera codigo tipo control calidad
        /// </summary>
        /// <returns></returns>
        public int GenerarCodigoTipoControlCalidad()
        {
            int codigoMaximo = 1;
            var lista = Accesor.ListarTipoControlCalidad();
            if (lista.Count > 0)
            {
                codigoMaximo = lista.OrderByDescending(x => x.CodigoTipoControlCalidad).FirstOrDefault().CodigoTipoControlCalidad + 1;
            }
            return codigoMaximo;
        }

        
        #endregion

        #region Accesor
        private static DATipoControlCalidad Accesor
        {
            [System.Diagnostics.DebuggerStepThrough]
            get { return new DATipoControlCalidad(); }
        }
        #endregion
    }
}
